package io.github.biezhi.singleton;

/**
 * 1. 懒汉式（双重检查锁定，Double-Checked Locking）
 * 懒汉式在第一次真正需要使用单例对象时才进行实例化。
 * 双重检查锁定通过两次检查INSTANCE是否已初始化来避免不必要的同步，从而提高性能。
 * 关键在于将同步操作限制在getInstance()方法内部，并且只在INSTANCE未初始化时才进行同步。
 */
public class Singleton2 {
    private volatile static Singleton2 instance;

    private Singleton2() {
    }

    public static Singleton2 getInstance() {
        if (instance == null) {
            synchronized (Singleton2.class) {
                if (instance == null) {
                    instance = new Singleton2();
                }
            }
        }

        return instance;
    }

}
